perm filename STRING.MAN[VLI,LSP] blob
sn#382061 filedate 1978-10-02 generic text, type T, neo UTF8
CHAPITRE 5
LES CHAINES DE CARACTERES
VLISP permet la manipulation d'objets de type chaine de caracteres
(STRINGS). Ces chaines sont stockees dans une zone geree
dynamiquement. Si cette zone se revele trop petite, une erreur
apparait; le libelle de cette erreur est :
** no room for strings.
Cette erreur est fatale. Il faut augmenter la taille de la zone
allouee aux chaines dans la fonction CONFIGURATION du fichier
initial CONFIG.INI et relancer tout le travail.
Une chaine de caracteres est une suite illimitee (si ce n'est par la
taille de la memoire, de caracteres quelconques. Sa representation
externe est cette suite de caracteres encadree du caractere
delimiteur de chaine. Si ce caractere doit etre insere dans une
chaine il doit etre double.
Les caracteristiques d'une chaine sont :
- les caracteres qu'elle contient
- le nombre de ces caracteres (la longeur de la chaine).
ex : la chaine contient les caracteres et a pour longeur
"CHer←10" CHer←10 7
"(""NON""?)" ("NON"?) 8
"""" " 1
"" aucun 0
( cette chaine s'appelle la chaine vide )
En VLISP une chaine de caracteres est consideree comme un ATOME (et
non une liste).
La valeur d'une chaine de caracteres est cette chaine de caracteres
elle-meme; il n'est donc pas necessaire de "quoter" les constantes
de chaine.
Tout comme les nombres, une chaine n'a ni C-valeur ni P-liste.
ex : "galamantdelareine" -> "galamantdelareine"
(CAR "allatour") -> NIL
(ATOM "magnanime") -> T
En entree le lecture des chaines par la fonction READ est validee
VLISP 10 . 3 Manuel de Reference Page 5-2
par le bit 17 du R.G. , ce bit est positionne par defaut.
En sortie la restitution du caractere delimiteur de chaine est
validee par le bit 27 du R.G. , ce bit est positionne par defaut.
Le caractere delimiteur de chaine (par defaut le caractere guillemet
") peut lui-meme etre modifie au moyen de la fonction (STATUS 16
<c>) dans laquelle <c> est le nouveau delimiteur de chaine (cf: les
fonctions STATUS).
Pour toutes les fonctions qui vont suivre, les arguments qui doivent
etre de type chaine sont representes par <strN>. Si ces arguments
ne sont pas de type chaine, ils sont convertis automatiquement en
chaine au moyen de la fonction STRING.
5.1 LES FONCTIONS DE CONVERSION DE CHAINES
(STRING <s>) [SUBR a 1 argument]
convertit la S-expression <s> (de type quelconque) en une
chaine de caracteres.
- si <s> est une chaine STRING ramene cette meme chaine.
- si <s> = NIL, STRING ramene la chaine vide "" .
- si <s> est un atome litteral, STRING ramene la chaine
contenant tous les caracteres du P-name de cet atome.
- si <s> est un nombre, STRING ramene la chaine contenant tous
les caracteres de la representation externe de ce nombre dans
la base de conversion courante.
- si <s> est une liste, elle est supposee etre une liste de
caracteres (i.e. d'atomes mono-caracteres) et STRING ramene la
chaine composee de ces caracteres.
ex : (STRING "OUKELABONPOLIN") -> "OUKELABONPOLIN"
(STRING) -> ""
(STRING 'RUSE) -> "RUSE"
(STRING (- 22.222 58.1)) -> "-35.878"
(STRING '(A Z /. Q)) -> "AZ.Q"
(MAKLIST <str>) [SUBR a 1 argument]
convertit la chaine <str> en une liste de caracteres (i.e.
d'atomes mono-caracteres). Si <str> est la chaine vide,
MAKLIST ramene NIL.
ex : (MAKLIST "URSUS") -> (U R S U S)
(MAKLIST 'LAMBDA) -> (L A M B D A)
VLISP 10 . 3 Manuel de Reference Page 5-3
(IMPLODE <s>) [SUBR a 1 argument]
si <s> est une chaine, IMPLODE interne les caracteres
constituant de cette chaine de la meme maniere que s'ils
etaient lus par la fonction READ. IMPLODE suppose donc que la
chaine de caracteres est la representation externe d'un objet
lisp quelconque qui sera convertit.
Si la chaine de caractere n'est pas une representation correcte
d'un objet lisp, une erreur apparait; le libelle de cette
erreur est :
** IMPLODE error : <n>
dans lequel <n> est le numero du type de l'erreur. Ces numeros
sont identiques aux numeros de l'erreur ** READ error.
ex : (IMPLODE "-567.9") -> -567.9
(IMPLODE "()") -> NIL
(IMPLODE "GENsymmm") -> GENsymmm
(IMPLODE "'[A B . C]") -> (MCONS A B C)
(IMPLODE (CONCAT "(" "A B" ")")) -> (A B)
(IMPLODE "(A B C]")
** IMPLODE error : 6
5.2 PREDICATS ET TESTS SUR LES CHAINES
(STRINGP <s>) [SUBR a 1 argument]
ramene <s> si <s> est une chaine, sinon STRINGP ramene NIL.
ex : (STRINGP "POT") -> "POT"
(STRINGP 56) -> NIL
(NULLSTRP <str>) [SUBR a 1 argument]
ramene <str> si <str> est la chaine vide "", sinon NULLSTRP
ramene NIL. Il est a noter que NIL et la chaine vide sont deux
objets differents.
ex : (NULLSTRP (ADD1 5)) -> NIL
(NULLSTRP NIL) -> ""
(car NULLSTRP convertit son argument)
(EQSTRING <str1> <str2>) [SUBR a 2 arguments]
ramene <str1> si la chaine <str1> contient les memes caracteres
et possede la meme longeur que la chaine <str2>. Cette
fonction est equivalente a la fonction EQ si les 2 arguments
sont des chaines; dans le cas ou ils ne le seraient pas,
EQSTRING va les convertir en chaine avant d'effectuer la
VLISP 10 . 3 Manuel de Reference Page 5-4
comparaison.
ex : (EQSTRING "ALA" "ALAS") -> NIL
(EQSTRING 'GLUCK "GLUCK") -> "GLUCK"
(EQSTRING '(A Z E R) 'AZER) -> "AZER"
(STRINGL <str>) [SUBR a 1 argument]
ramene le nombre de caracteres de la chaine <str>.
ex : (STRINGL "HUGH") -> 4
(STRINGL (SUB1 -9)) -> 3
(STRINGL EXPR) -> 4
(STRINGL NIL) -> 0
5.3 FONCTIONS DE CREATION DE CHAINES
(CONCAT <str1> ... <strN>) [SUBR a N arguments]
ramene une chaine resultant de la concatenation des copies de
toutes les chaines <str1> ... <strN>.
ex : (CONCAT "Ab" (ADD1 14) "" 'AT) -> "Ab15AT"
(SUBSTRING <str> <n1> <n2>) [SUBR a 3 arguments]
ramene une copie de la sous-chaine de <str> commencant a la
position <n1> et se terminant a la position <n2>.
si <n1> > <n2>, SUBSTRING ramene la chaine vide "".
si <n1> n'est pas un nombre, la sous-chaine commence au debut
(i.e. en position 1) de la chaine <str>.
si <n2> n'est pas un nombre ou est omis, la sous-chaine se
termine a la fin de la chaine <str>.
ex : (SUBSTRING "ABRACAD" 2 4) -> "BRA"
(SUBSTRING "ABRACAD" () 4) -> "ABRA"
(SUBSTRING "ABRACAD" 2) -> "BRACAD"
(SUBSTRING 'LONGMOT 4 4) -> "G"
(DUPL <str> <n>) [SUBR a 2 arguments]
ramene la chaine resultant de la duplication <n> fois de la
chaine <str>. Si <n> n'est pas un nombre ou est omis, DUPL
ramene une copie de la chaine <str>. Si <n> est <= a 0, DUPL
ramene la chaine vide "".
ex : (DUPL "ALO" 3) -> "ALOALOALO"
VLISP 10 . 3 Manuel de Reference Page 5-5
(DUPL 'ALO) -> "ALO"
(DUPL "ALO" -1) -> ""
(REVERSTR <str>) [SUBR a 1 argument]
ramene une copie de la chaine <str> inversee.
ex : (REVERSTR 'POTOP) -> "POTOP"
(REVERSTR "DELUGE") -> "EGULED"
(TRANSLATE <str1> <str2> <str3>) [SUBR a 3 arguments]
ramene une copie de la chaine <str1> en y remplacant les
caracteres qui font partie de la chaine <str2> par leurs
homologues dans la chaine <str3>. Si des caracteres de la
chaine <str2> n'ont pas d'homologues dans la chaine <str3>
(i.e. si (STRINGL <str2>) > (STRINGL <str3>) alors ces
caracteres sont enleves de la chaine resultante.
ex : (TRANSLATE "ABRACADABRA" "ARC" "OL") -> "OBLOODOBLO"
se lit traduire la chaine ABRACADABRA en y
remplacant tous les A par O, tous les R par L
et en enlevant tous les C.
5.4 EXEMPLES D'UTILISATION DES CHAINES
?
? (DE CONVBDC (NB)
? (IF (LE NB 1)
? NB
? (CONCAT (CONVBDC (QUO NB 2))
? (REM NB 2))))
= CONVBDC
= ; time = 0 ms ;
?
? (CONVBDC 13)
= "1101"
= ; time = 0 ms ;
?
? (DE PALINDROM (CH)
? ; fonction qui teste si la chaine CH est un palindrome ;
? (SETQ CH (TRANSLATE CH ",;.:!?'()[] "))
? ; enleve tous les espaces et les signes de ponctuation ;
? (EQSTRING (REVERSTR CH) CH))
= PALINDROM
= ; time = 0 ms ;
?
? (PALINDROM "ELU PAR CETTE CRAPULE ...")
VLISP 10 . 3 Manuel de Reference Page 5-6
= "ELUPARCETTECRAPULE"
= ; time = 20 ms ;
?
? (PALINDROM "GALAMANTELAREINE")
= NIL
= ; time = 20 ms ;
?
? ←
Bye
.
Page Index-1
TABLE D'INDEX DU CHAPITRE 5
(CONCAT str1 ... strn) SUBR a n arguments 5-4
(DUPL str n) SUBR a 2 arguments 5-4
(EQSTRING str1 str2) SUBR a 2 arguments 5-3
(IMPLODE s) SUBR a 1 argument . 5-3
(MAKLIST str) SUBR a 1 argument 5-2
(NULLSTRP str) SUBR a 1 argument 5-3
(REVERSTR str) SUBR a 1 argument 5-5
(STATUS 16 c) caractere delimiteur de chaine 5-2
(STRING s) SUBR a 1 argument . . 5-2
(STRINGL str) SUBR a 1 argument 5-4
(STRINGP s) SUBR a 1 argument . 5-3
(SUBSTRING str n1 n2) SUBR a 3 arguments 5-4
(TRANSLATE str1 str2 str3) SUBR a 3 arguments 5-5
** no room for strings. . . . . . 5-1
Bit 17 du r.g. . . . . . . . . . . 5-2
Bit 27 du r.g. . . . . . . . . . . 5-2
Chaine de caracteres . . . . . . . 5-1
Chaine vide . . . . . . . . . . . 5-1
Delimiteur de chaine . . . . . . . 5-2